home *** CD-ROM | disk | FTP | other *** search
/ MacWorld 1997 January / Macworld (1997-01).dmg / Shareware World / Graphics / CFG 2.3 (Shareware) / µCinema Converter / events.c < prev    next >
Text File  |  1994-04-02  |  5KB  |  250 lines

  1. /********************************************************************
  2.     µCinema Converter 1.0
  3.     module: events.c
  4.     April 1994
  5.     by John A. Schlack
  6.  ********************************************************************/
  7.  
  8.  
  9. #include "constants.h"
  10. #include "events.h"
  11. #include "menu bar.h"
  12. #include "PICS to QuickTime.h"
  13. #include "preferences.h"
  14. #include "µCinema.h"
  15.  
  16.  
  17. /* --------------------------------------------------------------------------------- */
  18.  
  19.  
  20. #define ABOUT_ITEM        1
  21.  
  22. #define CONVERT_ITEM    1
  23. #define PREFS_ITEM        2
  24. #define QUIT_ITEM        3
  25.  
  26. #define ABOUT_DIALOG    128
  27. #define ABOUT_PICT_ITEM    1
  28. #define ABOUT_FAKE_ITEM    2    /* not part of about, but value is set when hit escape key */
  29.  
  30.  
  31. /* --------------------------------------------------------------------------------- */
  32.  
  33.  
  34. static void    eventMouseDown( EventRecord * event );
  35. static void eventMenuChoice( long menuChoice );
  36. static void eventAppleMenu( short theItem );
  37. static void eventFileMenu( short theItem );
  38. static void aboutCinema( void );
  39. static pascal Boolean aboutDialogFilter( DialogPtr whichDialog, EventRecord * event,
  40.                 short * itemHit );
  41.  
  42.  
  43. /* --------------------------------------------------------------------------------- */
  44.  
  45.  
  46. void doEvents( void )
  47. {
  48.     EventRecord    event;
  49.     Boolean        lastNull;
  50.     char        theChar;
  51.     
  52.     lastNull = !WaitNextEvent( everyEvent, &event, 20L, nil );
  53.     alterProgramStatus( PS_LAST_EVENT_NULL, lastNull );
  54.  
  55.     switch( event.what )
  56.     {
  57.         case kHighLevelEvent:
  58.             AEProcessAppleEvent( &event );
  59.             break;
  60.             
  61.         case keyDown:
  62.         case autoKey:
  63.             if (event.modifiers & cmdKey)
  64.             {
  65.                 theChar = event.message & charCodeMask;
  66.                 eventMenuChoice( MenuKey( theChar ) );
  67.             }
  68.             break;
  69.  
  70.         case mouseDown:
  71.             eventMouseDown( &event );
  72.             break;
  73.     }
  74. }
  75.  
  76.  
  77. /* --------------------------------------------------------------------------------- */
  78.  
  79.  
  80. static void eventMouseDown( EventRecord * event )
  81. {
  82.     WindowPtr    whichWindow;
  83.     long        menuChoice;
  84.     short        thePart;
  85.  
  86.     thePart = FindWindow( event->where, &whichWindow );
  87.  
  88.     switch ( thePart )
  89.     {
  90.         case inMenuBar:
  91.             menuChoice = MenuSelect( event->where );
  92.             eventMenuChoice( menuChoice );
  93.             break;
  94.  
  95.         case inSysWindow :
  96.             SystemClick( event, whichWindow );
  97.             break;
  98.     }
  99. }
  100.  
  101.  
  102. /* --------------------------------------------------------------------------------- */
  103.  
  104.  
  105. static void eventMenuChoice( long menuChoice )
  106. {
  107.     short    theMenu, theItem;
  108.     
  109.     if ( menuChoice )
  110.     {
  111.         theMenu = HiWord( menuChoice );
  112.         theItem = LoWord( menuChoice );
  113.  
  114.         switch ( theMenu )
  115.         {
  116.             case APPLE_MENU_ID :
  117.                 eventAppleMenu( theItem );
  118.                 break;
  119.             case FILE_MENU_ID :
  120.                 eventFileMenu( theItem );
  121.                 break;
  122.         }
  123.         HiliteMenu( 0 );
  124.     }
  125. }
  126.  
  127.  
  128. /* --------------------------------------------------------------------------------- */
  129.  
  130.  
  131. static void eventAppleMenu( short theItem )
  132. {
  133.     Str255    accName;
  134.     short    accNumber;
  135.  
  136.     switch ( theItem )
  137.     {
  138.         case ABOUT_ITEM :
  139.             aboutCinema();
  140.             break;
  141.                 
  142.         default :
  143.             GetItem( cinemaMenu( APPLE_MENU_ID - BASE_MENU_ID ), theItem, accName );
  144.             accNumber = OpenDeskAcc( accName );
  145.             break;
  146.     }
  147. }
  148.  
  149.  
  150. /* --------------------------------------------------------------------------------- */
  151.  
  152.  
  153. static void eventFileMenu( short theItem )
  154. {
  155.     switch ( theItem )
  156.     {
  157.         case CONVERT_ITEM :
  158.             picsToMovieInteractive();
  159.             break;
  160.         case PREFS_ITEM :
  161.             preferencesDialog( nil );
  162.             break;
  163.         case QUIT_ITEM :
  164.             installProgramStatus( PS_APP_DONE );
  165.             break;
  166.     }
  167. }
  168.  
  169.  
  170. /* --------------------------------------------------------------------------------- */
  171.  
  172.  
  173. static void aboutCinema( void )
  174. {
  175.     DialogPtr    theDialog;
  176.     GrafPtr        old;
  177.     short         itemHit;
  178.     Boolean        dialogDone = false;
  179.  
  180.     theDialog = GetNewDialog( ABOUT_DIALOG, NULL, (WindowPtr) -1 );
  181.     if (theDialog == NULL)
  182.         return;
  183.     
  184.     GetPort( &old );
  185.     SetPort( theDialog );
  186.     ShowWindow( theDialog );
  187.     
  188.     while (!dialogDone)
  189.     {
  190.         ModalDialog( aboutDialogFilter, &itemHit );
  191.         switch( itemHit )
  192.         {
  193.             case ABOUT_PICT_ITEM:
  194.             case ABOUT_FAKE_ITEM:
  195.                 dialogDone = true;
  196.                 break;
  197.         }
  198.     }
  199.     SetPort( old );
  200.     DisposDialog( theDialog );
  201. }
  202.  
  203.  
  204. /* --------------------------------------------------------------------------------- */
  205.  
  206.  
  207. static pascal Boolean aboutDialogFilter( DialogPtr whichDialog, EventRecord * event,
  208.     short * itemHit )
  209. {
  210.     #define returnKey        13
  211.     #define enter            3
  212.     #define esc                27
  213.     #define pushButton        (ctrlItem + btnCtrl)
  214.  
  215.     Handle            itemHandle;
  216.     Rect            itemRect;
  217.     long            finalTicks;
  218.     short            itemType;
  219.     Boolean            filtered;
  220.     char            key;
  221.  
  222.     filtered = false;
  223.     switch ((*event).what)
  224.     {
  225.         case keyDown:
  226.         case autoKey:
  227.             key = (*event).message & charCodeMask;
  228.             if ((key == returnKey) || (key == enter) || (key == esc))
  229.             {
  230.                 if ((key == returnKey) || (key == enter))
  231.                     *itemHit = ok;
  232.                 else
  233.                     *itemHit = cancel;
  234.                 GetDItem (whichDialog, *itemHit, &itemType, &itemHandle, &itemRect);
  235.                 if ((itemType & itemDisable) == 0)
  236.                 {
  237.                     if ((itemType & (255 - itemDisable)) == pushButton)
  238.                     {
  239.                         HiliteControl ((ControlHandle) itemHandle, inButton);
  240.                         Delay (8, &finalTicks);
  241.                         HiliteControl ((ControlHandle) itemHandle, 0);
  242.                     }
  243.                     filtered = true;
  244.                 }
  245.             }
  246.             break;
  247.     }
  248.     return filtered;
  249. }
  250.